BUG_ON(pg[i].count_info != 0);
/* Add in any extra CPUs that need flushing because of this page. */
- cpus_andnot(extra_cpus_mask, pg[i].u.free.cpumask, mask);
+ cpus_andnot(extra_cpus_mask, cpu_online_map, mask);
tlbflush_filter(extra_cpus_mask, pg[i].tlbflush_timestamp);
cpus_or(mask, mask, extra_cpus_mask);
unsigned long mask;
unsigned int i, node = phys_to_nid(page_to_maddr(pg));
unsigned int zone = page_to_zone(pg);
- struct domain *d;
ASSERT(order <= MAX_ORDER);
ASSERT(node >= 0);
*/
pg[i].count_info = 0;
- if ( (d = page_get_owner(&pg[i])) != NULL )
- {
- pg[i].tlbflush_timestamp = tlbflush_current_time();
- pg[i].u.free.cpumask = d->domain_dirty_cpumask;
- }
- else
- {
- cpus_clear(pg[i].u.free.cpumask);
- }
+ /* If a page has no owner it will need no safety TLB flush. */
+ pg[i].tlbflush_timestamp =
+ page_get_owner(&pg[i]) ? tlbflush_current_time() : 0;
}
spin_lock(&heap_lock);
struct {
/* Order-size of the free chunk this page is the head of. */
u32 order;
- /* Mask of possibly-tainted TLBs. */
- cpumask_t cpumask;
} free;
} u;
/* Timestamp from 'TLB clock', used to reduce need for safety flushes. */
u32 tlbflush_timestamp;
-
-#if 0
-// following added for Linux compiling
- page_flags_t flags;
- atomic_t _count;
- struct list_head lru; // is this the same as above "list"?
-#endif
};
#define set_page_count(p,v) atomic_set(&(p)->_count, v - 1)
unsigned long count:26; /* Reference count */
} sh;
- /* Page is on a free list: ((count_info & PGC_count_mask) == 0). */
- struct {
- /* Mask of possibly-tainted TLBs. */
- cpumask_t cpumask;
- } free;
-
} u;
union {